iT邦幫忙

0

保留原本的 coding agent,用 OMA 加入工作流程與完成檢查

  • 分享至 

  • xImage
  •  

我維護的 OMA 讓你在支援的環境中繼續使用 Claude Code、Codex CLI 或 Cursor,並加入共通的專業技能、多 agent 工作流程與已設定的完成檢查。Lauren Tan 的官方課程公開章節涵蓋驗證技能、技能評估與嚴格的 CI 限制。公開的 pstack 驗證原則要求直接檢查實際結果,並在可行時保留能重新執行的檢查與輸出。

專案資訊與程式碼

專案名稱:oh-my-agent。開發狀態:持續維護,採 MIT 授權。

這個示範使用 OMA 15.0.13 的原始碼 CLI,在獨立的測試目錄手動呼叫真正的 Stop hook。影片呈現實際輸出,不是自主 agent 工作過程的錄影,也不是正式環境事故的紀錄。

架構:模型規劃,hook 檢查已設定的條件

OMA 以 .agents/ 統一管理設定與指令,再轉成支援的 agent 執行環境所需的格式。模型仍然負責規劃工作、選擇修改方式;OMA 管理工作流程狀態,並執行明確設定的檢查。

在 Claude Code、Codex CLI、Cursor 等支援的環境中,可以保留原本使用的 agent,再導入共通的設定與技能。不過,各環境可用的 hook 與功能不同,不能把一個環境的示範當成所有環境的行為。

在這個例子中,我啟用 Ralph 工作流程,把 test 設為完成 gate。工作流程尚未結束時,Stop hook 會執行設定的測試指令,再依結果決定是否阻擋停止。這樣可以在執行紀錄中找到完成判斷的依據。hook 不會替專案補齊測試案例,也不會判斷測試範圍以外的需求是否完成。

核心邏輯:期限邊界值與停止回應

測試函式是 isExpired(expiresAt, now)。三個測試分別檢查期限前、期限當下、期限後。原本的判斷式是:

return now > expiresAt;

規格要求期限當下就算過期。因此,當兩個值相等時,實際結果 false 與預期 true 不符。第一次執行測試是 2 個通過、1 個失敗,測試指令的退出碼為 1。

接著,我手動呼叫 Stop hook。它重新執行測試,回傳包含 "decision":"block" 的 JSON,阻擋這次停止。之後我把比較式改成:

- return now > expiresAt;
+ return now >= expiresAt;

修改後,三個測試全部通過。再次呼叫 Stop hook 時,標準輸出為空,示範用的工作流程狀態也被清除。事件紀錄留下 gate.passed,以及原因為 completion_gate_passed 的 session.ended。

這裡容易誤讀的是退出碼:Stop hook 本身在阻擋與放行兩種情況都以 0 結束。測試指令的退出碼、hook 的 JSON 決定、工作流程狀態是不同的資訊,不能只看 hook 程式是否成功執行,就判定工作已經通過檢查。

為什麼可以拿來試用

如果你想在 agent 宣告完成時,用專案已有的測試再確認一次,這個做法可以把檢查指令與結果留下來,方便回頭核對。建議先在小型測試專案中放入一個已知失敗的案例,觀察阻擋回應,再修正並重跑。示範證明的是這組測試的 gate 行為,沒有比較其他工具的效能,也沒有證明所有缺陷都能被找出。

Gist 內有執行紀錄、差異檔、驗證結果與重現腳本。閱讀紀錄時,可以同時核對測試輸出、decision 欄位和狀態清除的結果。

需要 CLI、hook 與完成 gate 時,先準備 Bun、uv 與 Serena,再執行:

bunx oh-my-agent@latest
oma doctor

如果只執行 npx skills add first-fluke/oh-my-agent,安裝的是技能包,不包含這個示範所需的完整 hook 與 gate 設定。oma doctor 可用來檢查安裝環境;後續仍要依自己的專案設定檢查指令。

本文使用 AI 協助撰寫、翻譯與修訂。技術描述以公開的執行紀錄與驗證結果為依據。


*提醒邦友,使用第三方服務/API 時,請務必評估資安風險與隱私保護
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言